HTMLify
76. Minimum Window Substring.java
Views: 1 | Author: cody
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | // 76. Minimum Window Substring class Solution { public String minWindow(String s, String t) { int slen=s.length(); int tlen=t.length(); HashMap<Character,Integer> smap=new HashMap<>(); HashMap<Character,Integer> tmap=new HashMap<>(); if(slen < tlen){ return ""; } int matchCount=0; for(int i=0;i<tlen;i++){ tmap.put(t.charAt(i),tmap.getOrDefault(t.charAt(i),0)+1); } int sp=0; int ep=0; int anssp=0; int ansep=0; int anslen=Integer.MAX_VALUE; while(ep<slen){ if(matchCount == tlen){ if(ep-sp < anslen){ anssp=sp; ansep=ep; anslen=(ep-sp); } smap.put(s.charAt(sp),smap.get(s.charAt(sp))-1); if(smap.get(s.charAt(sp)) < tmap.getOrDefault(s.charAt(sp),0)){ matchCount--; } sp++; }else{ smap.put(s.charAt(ep),smap.getOrDefault(s.charAt(ep),0)+1); if(smap.get(s.charAt(ep)) <= tmap.getOrDefault(s.charAt(ep),0)){ matchCount++; } ep++; } } while(matchCount == tlen){ if(ep-sp < anslen){ anssp=sp; ansep=ep; anslen=ep-sp; } smap.put(s.charAt(sp),smap.get(s.charAt(sp))-1); if(smap.get(s.charAt(sp)) < tmap.getOrDefault(s.charAt(sp),0)){ matchCount--; } sp++; } return s.substring(anssp,ansep); } } |